package com.gaga.common.utils;

import net.beadsproject.beads.core.AudioContext;
import net.beadsproject.beads.ugens.BiquadFilter;
import net.beadsproject.beads.ugens.SamplePlayer;

public class SimpleEqualizer {

    private static AudioContext ac;
    private static BiquadFilter lowBand, midBand, highBand;
    private static SamplePlayer player;

    // 添加全局标志位
    private static volatile boolean isCompleted = false;

    public static void main(String[] args) {

        EightBandEqualizer eightBandEqualizer = new EightBandEqualizer("C:/Users/lenovo/Desktop/test/1.wav");
//        eightBandEqualizer.setBandGain(2, 24.0f);
        // 初始化音频上下文
//        ac = new AudioContext(new JavaSoundAudioIO(512));
//
//        try {
//            // 加载音频文件（需替换为你的音频文件路径）
//            Sample sample = new Sample("C:/Users/lenovo/Desktop/test/1.wav");
//            player = new SamplePlayer(ac, sample);
//            player.setLoopType(SamplePlayer.LoopType.NO_LOOP_FORWARDS);
//
//            // 设置播放完成监听器
//            player.setEndListener(new Bead() {
//                @Override
//                protected void messageReceived(Bead message) {
//                    if (!isCompleted) {
//                        isCompleted = true;
//                        System.out.println("音频播放完成！");
//                        ac.stop();
//                    }
//                }
//            });
//
//            // 1.0倍速
//            UGen rateuGen = new Static(ac, 1f);
//            player.setRate(rateuGen);
//
//            // 创建三个频段的滤波器（低、中、高）
//            createFilters();
//
//            // 连接音频链：播放器 -> 低音滤波 -> 中音滤波 -> 高音滤波 -> 输出
//            Gain masterGain = new Gain(ac, 2, 0.1f);
//            // 修正连接顺序
//            highBand.addInput(player);
//            midBand.addInput(highBand);
//            lowBand.addInput(midBand);
//            // 滤波信号进入音量控制
//            masterGain.addInput(lowBand);
//            // 仅音量控制输出
//            ac.out.addInput(masterGain);
//
//            // 启动音频
//            ac.start();
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }

    /**
     * 创建低、中、高频段的滤波器
     */
    private static void createFilters() {
        // 低频段：中心频率 200Hz，Q值 1.0，初始增益 0dB
        lowBand = new BiquadFilter(ac, 2, BiquadFilter.Type.PEAKING_EQ);
        lowBand.setFrequency(200).setQ(1.0f).setGain(15f);

        // 中频段：中心频率 2000Hz，Q值 1.0，初始增益 0dB
        midBand = new BiquadFilter(ac, 2, BiquadFilter.Type.PEAKING_EQ);
        midBand.setFrequency(2000).setQ(1.0f).setGain(0.0f);

        // 高频段：中心频率 6000Hz，Q值 1.0，初始增益 0dB
        highBand = new BiquadFilter(ac, 2, BiquadFilter.Type.PEAKING_EQ);
        highBand.setFrequency(6000).setQ(1.0f).setGain(0.0f);
    }
}